package sparse_arrays;

import java.util.Arrays;

public class SparseArrays {
    public static void main(String[] args) {
        // 先创建一个原始的二维数组 11 * 11
        // 0表示没有棋子 、1表示黑子，2表示蓝色子
        int chessArr1[][] = new int[11][11];
        chessArr1[1][2] = 1;
        chessArr1[2][3] = 2;
        // 输出原始数组
        System.out.println("原始的二维数组：");
        for (int[] arr : chessArr1) {
            System.out.print(Arrays.toString(arr));
            System.out.println();
        }
        // 将二维数组 转 稀疏数组
        // 1.先遍历得到非0的个数
        int count = 0;
        for (int arr[] : chessArr1) {
            for (int i : arr) {
                if (i != 0) {
                    count++;
                }
            }
        }
//        System.out.println(count);
        // 2.创建相应的稀疏数组
        int sparseArr[][] = new int[count + 1][3];
        // 给稀疏数组赋值
        sparseArr[0][0] = 11;
        sparseArr[0][1] = 11;
        sparseArr[0][2] = count;
        // 遍历二维数组，将非零的值存放在稀疏数组中
        int num = 0; // 用于记录是第几个非零
        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; j++) {
                if (chessArr1[i][j] != 0) {
                    num++;
                    sparseArr[num][0] = i;
                    sparseArr[num][1] = j;
                    sparseArr[num][2] = chessArr1[i][j];

                }
                if (num > 2) {
                    break;
                }
            }
            if (num > 2) {
                break;
            }
        }

        // 输出稀疏数组
        System.out.println("得到的稀疏数组为：");
        for (int[] arr : sparseArr) {
            System.out.println(Arrays.toString(arr));
        }

        // 将稀疏数组恢复为普通数组
        // 1.先读取稀疏数组的第一行，根据第一行的行数和列数创建一个原始的二维数组，
        // 2.再进行赋值操作
        int chessArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
        // 从稀疏数组的第二行开始遍历
        for (int i = 1; i < sparseArr.length; i++) {
            chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
        }
        System.out.println("恢复后的原始数组为：");
        for (int[] arr : chessArr2) {
            System.out.println(Arrays.toString(arr));
        }
    }
}
